Android群英传 1 Android体系与系统架构

Google生态系统

Android系统架构

2fdda3cc7cd98d10ac7dfab52b3fb80e7aec908d
2fdda3cc7cd98d10ac7dfab52b3fb80e7aec908d

这些层次结构即是相互独立的,又是相互关联的。

Linux

Linux层(仅为Linux内核),Android最底层最核心的部分。显示内核版本,就是显示所用的Linux内核的版本。Linux层包含了Android系统的核心服务,包括硬件驱动,进程管理,安全系统等等。

Dalvik与ART

Dalvik包含了一整套Android运行环境虚拟机,每个App都会分配Dalvik虚拟机来保证互相之间不受干扰,并保持独立,特点是在运行时编译。
在Android 5.x开始,ART模式已经取代了Dalvik,ART是安装时进行编译,在运行时就不用编译了。

Framework

见上图

Standard libraries

见上图

Application

不管是使用NDK开发还是Java开发的App,都有Android Manifest文件、Dalvik Classes、Resource Bundle这些东西。

Android App组件架构

即四大组件:Activity、BroadCastReciever、ContentProvider和Service。它们是组成一个Android App的最基本元素。

Android四大组件如何协同工作

Activity作为人机交互的第一界面,负责向用户展示和处理结果,信息的来源可以是通过资源获取,也可以是通过Content Provider来获取其他应用的信息,或是Service从后台计算,下载,处理后的结果,也可以是通过BroadCast Reciever获取到广播信息。同时,Android系统还提供了一个信使Intent,作为信息传递的载体。组件与组件之间通过Intent来通信、传递信息、交换数据,正是通过这样一种方式,四大组件形成了各自独立而又紧密联系的关系。

应用运行上下文对象

Android系统上下文对象即Context,Activity、Service、Application都是继承自Context。
Android应用程序会在几个时间点创建应用上下文Context。

  1. 创建Application
  2. 创建Activity
  3. 创建Service

创建Context的时机就是在创建Context的实现类时。

Android系统源代码目录与系统目录

Android系统源代码目录包含了Android系统所有的源代码,从底层驱动到上层应用,Android系统对所有文件都进行了详细管理。在手机中,Android系统的目录和源代码目录不是一一对应的,与源代码编译后,与打包生成的Image文件的结构相同。

Android系统源代码目录

看完Android源代码,要懂C、懂脚本、懂Java。

屏幕快照 2018-07-14 上午10.18.18
屏幕快照 2018-07-14 上午10.18.18

应注意,不是所有的源代码结构都是这样。只有AOSP的Android项目才是这样的结构,有些芯片厂家如MTK目录结构就不同。
Android源码采用Makefile编译。
像Android这样的大型项目,它的源代码不计其数,不同的功能,模块,按类型分别放置在不同的目录中,这些模块通常会有Makefile文件进行管理。它定义了一系列的规则来指定模块,哪些文件需要编译,以及这些文件该按照怎演的顺序去编译。甚至可以配置更复杂的功能操作,比如定义编译规则,打包规则,Makefile就像一个shell脚本,不仅可以使用自己的语法,也能调用操作系统的命令。
Android系统源代码目录每个目录中还会包含更多的目录,而它的每一个最小的功能单位的目录下,都会有一个Makefile文件,这样每一级向上,通过一个个Makefile文件,就把整个源代码有条不紊的联系在一起了。

Android系统目录

通过ADB连上手机,通过Linux的ls命令查看Android系统的根目录。其中/system和/data是开发者非常关心的两个目录。

/system/app/

这里面放的是一些系统的App

/system/bin/

这里面主要放的是Linux自带的组件

/system/build.prop

这里记录的是系统的属性信息。

/system/fonts/

系统字体存放的目录root后可下载TTF格式字体替代原字体。

/system/framework/

系统的核心文件,架构层。

/system/lib/

存放几乎所有的共享库(.so)文件。

/system/media/

该目录用来保存系统提示音、系统铃声。

/system/usr/

该目录用来保存用户的配置文件,如键盘布局、共享、时区文件等。

/data/app/

data目录包含了用户大部分数据信息。app目录下包含了用户安装的App或者升级的App。

/data/data/

这个目录应该是开发者访问最多的目录了,这里包含了App的数据信息,文件信息、数据库信息等,以包名的方式来区分各个应用。

/data/system/

这个目录包含了手机的各项系统信息。

/data/misc/

这个目录保存了大部分的WiFi、VPN信息。

Android App文件目录